iT邦幫忙

2022 iThome 鐵人賽

DAY 4
1
DevOps

從零開始的Kubernetes轉換系列 第 4

IaC Terraform provision(二)-讓 terraform 使用 GCP IAM service account

  • 分享至 

  • xImage
  •  

讓 terraform 使用 GCP IAM service account

首先呢,為了讓 terraform 可以在我們的電腦上或CI/CD pipeline 對GCP 做 Infra provision。我們可以用 IAM 裡面的 service account 來做到這件事。這邊我們必須先手動create 一個terraform 用的 service account,那這邊會有個有趣的問題。或許會有人想到可以用 terraform 來管理 IAM,的確 terraform 也可以用來管理 IAM 但是會有一個雞生蛋、蛋生雞的問題。因此這邊就來看一下怎麼在第一次 project 中產生 service account 讓terraform 可以執行。

首先我們先到 GCP console IAM 頁面,左邊有個 service account,上面有個 CREATE SERVICE ACCOUNT的按鈕,進入之後來到service account的設定頁面。

這邊我們填入必要的資訊

在這邊我們加入了 compute storage admin(GCS)、compute admin(VM instance)、kubenetes engine admin(GKE)的權限後,選取DONE

接下來我們要幫這個 service account 拿一把 key 這個就是我們用來讓 terraform 可以跟 GCP 溝通的 credential

我們點入terraform的service account後會看到上面選取keys欄位
,然後點擊add key後會跳出一個視窗這邊我們選擇JSON type後點選create後就會下載一個json file。這個json file就是可以跟GCP溝通的credential。另外這邊小小的叮嚀一下,這個key畢竟有access GCP project裡面的機器權限。所以請勿在image或是git repository存放,CI/CD Pipeline裡面也切記要做好secret的存放。但這個security的議題可以討論很大一個範圍,在這邊就不多做敘述。未來有機會再開個文章介紹。

除了開啟terraform用的service account,我們還需要開啟相對應的API service這樣才能夠讓terraform使用。

我們需要開啟 cloud resource的API和IAM的API

都打開以後

回到terraform的目錄,我們終於可以來設定啦

把剛剛拿到的json file copy到目錄下我們可以改名成cred.json

然後加入以下的code

provider.tf

terraform {
  required_version = ">= 0.12"
}
provider "google" {
  project     = var.gcp_project
  credentials = file(var.gcp_auth_file)
  region      = var.gcp_region
}

然後在variable.tf加入

# GCP authentication file
variable "gcp_auth_file" {
  type        = string
  description = "GCP authentication file"
}
# define GCP region
variable "gcp_region" {
  type        = string
  description = "GCP region"
}
# define GCP project name
variable "gcp_project" {
  type        = string
  description = "GCP project name"
}

terraform.tfvars加入

# GCP Settings
gcp_project   = "playground"
gcp_region    = "us-west-1"
gcp_auth_file = "./cred.json"

接下來執行
terraform init
terraform plan
terraform apply
如果成功的話就可以建出我們的VM囉

那如果大家有成功執行完畢 我們可以看到有一個terraform.tfstate的檔案。這個檔案記錄了一些我們infra上面的狀態。

現在terraform都支援remote backend了。
因此下一篇我們就來介紹如何設定gcs來做到可以讓terraform的tfstate存在cloud storage並且支援version control。


上一篇
IaC Terraform provision(一) - terraform 簡介
下一篇
IaC Terraform provision(三) - 使用GCS作為Terraform backend以及terraform import
系列文
從零開始的Kubernetes轉換30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言